---
id: 655a142ae611b30e5df0ac16
title: Крок 11
challengeType: 20
dashedName: step-11
---

# --description--

Тепер потрібно викликати ще один метод `_insert()` в межах методу `insert`, який виконає фактичну вставку. Незабаром ви визначите метод `_insert`.

Видаліть `pass` і призначте `self._insert(self.root, key)` до `self.root`.

Зверніть увагу:

- `self.root` передає кореневий вузол дерева як перший аргумент. Це перший крок для процесу вставки.
- `key` передає значення `key`, яке потрібно вставити як другий аргумент.

# --hints--

Рекурсивно викличте метод `_insert()` за допомогою `self._insert()`

```js
({ test: () =>
  {
    const transformedCode = code.replace(/\r/g, "");        
    const ins = __helpers.python.getDef("\n"+transformedCode, "insert");
    const {function_body} = ins;    
    assert(function_body.match(/self\._insert\s*\([^(]*\)/));
  }
})
```

Передайте `self.root` та `key` до виклику `_insert()`.

```js
({ test: () =>
  {
    const transformedCode = code.replace(/\r/g, "");        
    const ins = __helpers.python.getDef("\n"+transformedCode, "insert");
    const {function_body} = ins;    
    assert(function_body.match(/self\._insert\s*\(\s*self\.root\s*,\s*key\s*\)/));
  }
})
```

Призначте значення, яке повертає виклик `_insert()`, до `self.root`.

```js
({ test: () =>
  {
    const transformedCode = code.replace(/\r/g, "");        
    const ins = __helpers.python.getDef("\n"+transformedCode, "insert");
    const {function_body} = ins;    
    assert(function_body.match(/^\s{8}self\.root\s*=\s*self\._insert\s*\(\s*self\.root\s*,\s*key\s*\)/m));
  }
})
```

# --seed--

## --seed-contents--

```py
class TreeNode:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None

class BinarySearchTree:
    def __init__(self):
        self.root = None

--fcc-editable-region--
    def insert(self,key):
        pass
--fcc-editable-region--
```
